package com.heima.user.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.heima.common.dto.ResponseResult;
import com.heima.common.enums.AppHttpCodeEnum;
import com.heima.common.util.AppJwtUtil;
import com.heima.user.dto.LoginDto;
import com.heima.user.dto.WmUser;
import com.heima.user.entity.ApUser;
import com.heima.user.mapper.ApUserMapper;
import com.heima.user.service.IApUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.seata.common.util.StringUtils;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * APP用户信息表 服务实现类
 * </p>
 *
 * @author syl
 * @since 2022-06-28
 */
@Service
public class ApUserServiceImpl extends ServiceImpl<ApUserMapper, ApUser> implements IApUserService {

    @Override
    public ResponseResult login(LoginDto dto) {
        //先确定用户名或密码是否为空
        if (StringUtils.isNotBlank(dto.getPhone()) && StringUtils.isNotBlank(dto.getPassword())) {
            //根据电话号码和密码登录
            //根据电话号码查用户
            LambdaQueryWrapper<ApUser> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(ApUser::getPhone, dto.getPhone());
            ApUser adUser = this.getOne(queryWrapper);
            //如果查不到返回结果
            if (adUser == null) {
                return ResponseResult.errorResult(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST);
            }
            //如果能查到再比较密码
            //页面传过来的密码是明文的，我们需要加密，加密的时候为了更安全我们给每个人的密码上加不同的盐
            String password = DigestUtils.md5Hex(dto.getPassword() + adUser.getSalt());
            if (!StringUtils.equals(adUser.getPassword(), password)) {
                return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
            }

            //根据接口文档上的要求，data数据的位置需要返回 user和token
            Map resultMap = new HashMap();
            //去除用户的敏感信息
            adUser.setSalt("");
            adUser.setPassword("");
            adUser.setPhone("");
            resultMap.put("user", adUser);

            Map claimMaps = new HashMap();
            claimMaps.put("userId", adUser.getId());
            claimMaps.put("name", adUser.getName());
            String token = AppJwtUtil.getToken(claimMaps);

            resultMap.put("token", token);
            return ResponseResult.okResult(resultMap);

        } else {
            //不登录

            ApUser adUser = new ApUser();
            Map resultMap = new HashMap();
            //去除用户的敏感信息
            adUser.setId(0);
            resultMap.put("user", adUser);

            Map claimMaps = new HashMap();
            claimMaps.put("userId", 0);
            claimMaps.put("name","");
            String token = AppJwtUtil.getToken(claimMaps);

            resultMap.put("token", token);
            return ResponseResult.okResult(resultMap);
        }

    }
}
